package br.com.foxinline.servico.ep;

import br.com.foxinline.enums.ep.Central;
import br.com.foxinline.modelo.ep.AtoTipoEP;
import br.com.foxinline.servico.ServicoGenerico;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author cadomeireles
 */
@Stateless
public class AtoTipoEPServico extends ServicoGenerico<AtoTipoEP> {

    public AtoTipoEPServico() {
        super(AtoTipoEP.class);
    }

    @Override
    public void deletar(AtoTipoEP atoTipoEP) {
        atoTipoEP.setAtivo(false);
        super.atualizar(atoTipoEP);
    }

    public List<AtoTipoEP> pesquisar(AtoTipoEP atoTipoEP) {
        String sql = "select atoTipoEP from AtoTipoEP atoTipoEP where atoTipoEP.ativo = true";
        
        if (atoTipoEP.getCodigo() != null && !atoTipoEP.getCodigo().isEmpty()) {
            sql += " and atoTipoEP.codigo = " + atoTipoEP.getCodigo();
        }

        if (atoTipoEP.getDescricao() != null && !atoTipoEP.getDescricao().isEmpty()) {
            sql += " and lower(atoTipoEP.descricao) like '%" + atoTipoEP.getDescricao().toLowerCase() + "%'";
        }        
        
        Query query = getEntityManager().createQuery(sql);

        return query.getResultList();
    }

    public List<AtoTipoEP> autocompletarAtoTipoCEP(String descricao){

        Query query = autocompletarAtoTipo(descricao);

        query.setParameter("central", Central.CEP);
        
        return query.getResultList();
    }

    public List<AtoTipoEP> autocompletarAtoTipoCESDI(String descricao){

        Query query = autocompletarAtoTipo(descricao);
        
        query.setParameter("central", Central.CESDI);

        return query.getResultList();
    }

    public List<AtoTipoEP> autocompletarAtoTipoRCTO(String descricao){

        Query query = autocompletarAtoTipo(descricao);
        
        query.setParameter("central", Central.RCTO);

        return query.getResultList();    
    }

    private Query autocompletarAtoTipo(String descricao) {
        String sql = "select atoTipoEP from AtoTipoEP atoTipoEP where atoTipoEP.ativo = true";
        sql += " and atoTipoEP.central = :central";
        sql += " and lower(atoTipoEP.descricao) like '%" + descricao.toLowerCase().trim() + "%'";
        Query query = getEntityManager().createQuery(sql);
        return query;
    }

    public List<AtoTipoEP> autocompletar(String query){
        return buscarPeloNome(query);
    }

    public List<AtoTipoEP> buscarPeloNome(String query){
        List<AtoTipoEP> atoTiposEP = getEntityManager().createQuery("select atoTipoEP from " + AtoTipoEP.class.getSimpleName() + " atoTipoEP where atoTipoEP.ativo = true and lower(atoTipoEP.descricao) like '%" + query.toLowerCase().trim() + "%'").getResultList();
        return atoTiposEP;
    }    
    
}
